home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / Oberon⁄F™ 1.1 / Dev / Rsrc / New / Views4 (.txt) < prev    next >
Encoding:
Oberon Document  |  1995-08-09  |  8.2 KB  |  245 lines  |  [oODC/obnF]

  1. Documents.StdDocumentDesc
  2. Documents.DocumentDesc
  3. Containers.ViewDesc
  4. Views.ViewDesc
  5. Stores.StoreDesc
  6. Documents.ModelDesc
  7. Containers.ModelDesc
  8. Models.ModelDesc
  9. Stores.ElemDesc
  10. TextViews.StdViewDesc
  11. TextViews.ViewDesc
  12. TextModels.StdModelDesc
  13. TextModels.ModelDesc
  14. TextModels.AttributesDesc
  15. Helvetica
  16. Helvetica
  17. Helvetica
  18. StdStamps.StdViewDesc
  19. Helvetica
  20. Helvetica
  21. Helvetica
  22. MODULE NewViews;
  23.     IMPORT Domains, Stores, Ports, Models, Views, Controllers, Properties;
  24.     CONST
  25.         minVersion = 0; maxVersion = 0;
  26.     TYPE
  27.         Model = POINTER TO RECORD (Models.ModelDesc)
  28.             (* model fields *)
  29.         END;
  30.         UpdateMsg = RECORD (Models.UpdateMsg)
  31.             (* message fields *)
  32.         END;
  33.         ModelOp = POINTER TO RECORD (Domains.OperationDesc)
  34.             model: Model;
  35.             (* model-operation fields *)
  36.         END;
  37.         View = POINTER TO RECORD (Views.ViewDesc)
  38.             model: Model;
  39.             (* view fields *)
  40.         END;
  41.         ViewOp = POINTER TO RECORD (Domains.OperationDesc)
  42.             view: View;
  43.             (* view-operation fields *)
  44.         END;
  45.     (* ModelOp *)
  46.     PROCEDURE (op: ModelOp) Do;
  47.         VAR msg: UpdateMsg;
  48.     BEGIN
  49.         (* perform model operation and set up the fields of the update message accordingly *)
  50.         Models.Broadcast(op.model, msg)    (* update all views on this model *)
  51.     END Do;
  52.     PROCEDURE NewModelOp (model: Model (* additional parameters *) ): ModelOp;
  53.         VAR op: ModelOp;
  54.     BEGIN
  55.         ASSERT(model # NIL, 20);
  56.         NEW(op);
  57.         (* set up operation parameters *)
  58.         RETURN op
  59.     END NewModelOp;
  60.     (* Model *)
  61.     PROCEDURE (m: Model) Internalize (VAR rd: Stores.Reader);
  62.         VAR version: SHORTINT;
  63.     BEGIN
  64.         (*ASSERT(m is not yet initialized, 20);*)
  65.         m.Internalize^(rd);
  66.         IF ~rd.cancelled THEN
  67.             rd.ReadVersion(minVersion, maxVersion, version);
  68.             IF ~rd.cancelled THEN
  69.                 (* read model fields *)
  70.             END
  71.         END
  72.     END Internalize;
  73.     PROCEDURE (m: Model) Externalize (VAR wr: Stores.Writer);
  74.     BEGIN
  75.         (*ASSERT(m is already initialized, 20);*)
  76.         m.Externalize^(wr);
  77.         wr.WriteVersion(maxVersion);
  78.         (* write model fields *)
  79.     END Externalize;
  80.     PROCEDURE (m: Model) InitFrom (source: Models.Model);
  81.     BEGIN
  82.         (*ASSERT(m is not yet initialized, 20);*)
  83.         ASSERT(source # NIL, 21);
  84.         (*ASSERT(source is already initialized, 22);*)
  85.         (* set up empty model *)
  86.     END InitFrom;
  87.     PROCEDURE (m: Model) CopyAllFrom (source: Models.Model);
  88.     BEGIN
  89.         (*ASSERT(m is not yet initialized, 20);*)
  90.         ASSERT(source # NIL, 21);
  91.         (*ASSERT(source is already initialized, 22);*)
  92.         ASSERT(Stores.SameType(m, source), 23);
  93.         WITH source: Model DO
  94.             (* perform deep copy of source *)
  95.         END
  96.     END CopyAllFrom;
  97.     (* ViewOp *)
  98.     PROCEDURE (op: ViewOp) Do;
  99.     BEGIN
  100.         (* perform view operation *)
  101.         Views.Update(op.view, Views.keepFrames)    (* restore v in any frame that displays it *)
  102.     END Do;
  103.     PROCEDURE NewViewOp (view: View (* additional parameters *) ): ViewOp;
  104.         VAR op: ViewOp;
  105.     BEGIN
  106.         ASSERT(view # NIL, 20);
  107.         NEW(op);
  108.         (* set up operation parameters *)
  109.         RETURN op
  110.     END NewViewOp;
  111.     (* View *)
  112.     PROCEDURE (v: View) Internalize (VAR rd: Stores.Reader);
  113.         VAR version: SHORTINT; st: Stores.Store;
  114.     BEGIN
  115.         ASSERT(v.model = NIL, 20);
  116.         v.Internalize^(rd);
  117.         IF ~rd.cancelled THEN
  118.             rd.ReadVersion(minVersion, maxVersion, version);
  119.             IF ~rd.cancelled THEN
  120.                 rd.ReadStore(st);
  121.                 IF (st # NIL) & (st IS Model) THEN
  122.                     v.InitModel(st(Model));
  123.                     (* read view fields *)
  124.                 ELSE
  125.                     rd.TurnIntoAlien(Stores.alienComponent)    (* cancel internalization of v *)
  126.                 END
  127.             END
  128.         END
  129.     END Internalize;
  130.     PROCEDURE (v: View) Externalize (VAR wr: Stores.Writer);
  131.     BEGIN
  132.         ASSERT(v.model # NIL, 20);
  133.         v.Externalize^(wr);
  134.         wr.WriteVersion(maxVersion);
  135.         (* write view fields *)
  136.     END Externalize;
  137.     PROCEDURE (v: View) CopyFrom (source: Views.View);
  138.     BEGIN
  139.         (*ASSERT(v not yet initialized, except for model, 20);*)
  140.         ASSERT(source # NIL, 21);
  141.         ASSERT(Stores.SameType(v, source), 23);
  142.         ASSERT(v.model # NIL, 24);
  143.         v.CopyFrom^(source);
  144.         WITH source: View DO
  145.             ASSERT(source.model # NIL, 22);
  146.             (* copy view fields *)
  147.             IF v.model # source.model THEN
  148.                 (*
  149.                     Check and possibly update or initialize v's state which refers to its model.
  150.                     Example: scroll position is set to a legal value, e.g. to the beginning
  151.                 *)
  152.             END
  153.         END
  154.     END CopyFrom;
  155.     PROCEDURE (v: View) InitModel (m: Models.Model);
  156.     BEGIN
  157.         ASSERT(m # NIL, 20);
  158.         (*ASSERT(m already initialized, 21);*)
  159.         ASSERT((v.model = NIL) OR (v.model = m), 22);
  160.         ASSERT(m IS Model, 23);
  161.         v.model := m(Model)
  162.     END InitModel;
  163.     PROCEDURE (v: View) ThisModel (): Models.Model;
  164.     BEGIN
  165.         ASSERT(v.model # NIL, 100);
  166.         RETURN v.model
  167.     END ThisModel;
  168.     PROCEDURE (v: View) Restore (f: Views.Frame; l, t, r, b: LONGINT);
  169.         VAR w, h: LONGINT;
  170.     BEGIN
  171.         (* restore foreground in rectangle (l, t, r, b) *)
  172.         (* replace the body of this procedure with your Restore behavior *)
  173.         v.context.GetSize(w, h);
  174.         f.DrawLine(0, 0, w, h, f.dot, Ports.red)
  175.     END Restore;
  176.     PROCEDURE (v: View) HandleModelMsg (VAR msg: Models.Message);
  177.     BEGIN
  178.         ASSERT(msg.model # NIL, 20); ASSERT(msg.model = v.model, 21);
  179.         WITH msg: Models.UpdateMsg DO
  180.             WITH msg: UpdateMsg DO
  181.                 (* calculate bounding box of area to restore, and then call
  182.                 Views.UpdateIn(v, l, t, r, b, Views.keepFrames)
  183.                 *)
  184.             ELSE
  185.                 Views.Update(v, Views.keepFrames)    (* restore v in any frame that displays it *)
  186.             END
  187.         ELSE    (* ignore other messages *)
  188.         END
  189.     END HandleModelMsg;
  190.     PROCEDURE (v: View) HandleCtrlMsg (f: Views.Frame; VAR msg: Controllers.Message; VAR focus: Views.View);
  191.     BEGIN
  192.         ASSERT(focus = NIL, 23);
  193.         WITH msg: Controllers.PollOpsMsg DO
  194.             (* specify which editing operations are supported *)
  195.         | msg: Controllers.TrackMsg DO
  196.             (* implement mouse tracking *)
  197.         | msg: Controllers.EditMsg DO
  198.             (* implement editing operations *)
  199.         ELSE    (* ignore other messages *)
  200.         END
  201.     END HandleCtrlMsg;
  202.     PROCEDURE (v: View) HandlePropMsg (VAR p: Properties.Message);
  203.         CONST defaultWidth = 100 * Ports.mm; defaultHeight = 70 * Ports.mm;
  204.     BEGIN
  205.         WITH p: Properties.FocusPref DO
  206.             p.atLocation := FALSE; p.hotFocus := FALSE; p.setFocus := TRUE; p.selectOnFocus := TRUE
  207.         | p: Properties.SizePref DO
  208.             IF p.w = Views.undefined THEN p.w := defaultWidth END;
  209.             IF p.h = Views.undefined THEN p.h := defaultHeight END
  210.         ELSE    (* ignore other messages *)
  211.         END
  212.     END HandlePropMsg;
  213.     (** miscellaneous **)
  214.     PROCEDURE Focus* (): Views.View;
  215.         VAR v: Views.View;
  216.     BEGIN
  217.         v := Controllers.FocusView();
  218.         IF (v # NIL) & (v IS View) THEN RETURN v(View) ELSE RETURN NIL END
  219.     END Focus;
  220.     PROCEDURE New* (): Views.View;
  221.         VAR m: Model; v: View;
  222.     BEGIN
  223.         NEW(m);
  224.         (* initialize model fields *)
  225.         NEW(v); v.InitModel(m);
  226.         (* initialize view fields *)
  227.         RETURN v
  228.     END New;
  229.     PROCEDURE Deposit*;
  230.     BEGIN
  231.         Views.Deposit(New())
  232.     END Deposit;
  233. END NewViews.
  234. TextControllers.StdCtrlDesc
  235. TextControllers.ControllerDesc
  236. Containers.ControllerDesc
  237. Controllers.ControllerDesc
  238. TextRulers.StdRulerDesc
  239. TextRulers.RulerDesc
  240. TextRulers.StdStyleDesc
  241. TextRulers.StyleDesc
  242. TextRulers.AttributesDesc
  243. Helvetica
  244. Documents.ControllerDesc
  245.